 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.general.bc;

import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.cip.esymons.general.be.Menu;
/**
 *
 * @author Lizardo Rios
 */
@Stateless
public class MenuFacade implements MenuFacadeLocal {

    @PersistenceContext
    private EntityManager em;

    public List<Menu> listaMenuPorCodigo(int codigo){
        try{
            Query q = em.createQuery("select m from Menu m where m.menCodigo = ?1");
            q.setParameter(1, codigo);
            return q.getResultList();
        }catch(Exception e){
            System.out.println("ERRORRR: listar menu por codigo " + e.toString());
            return new ArrayList();
        }
    }

    public void create(Menu menu) {
        em.persist(menu);
    }

    public void edit(Menu menu) {
        em.merge(menu);
    }

    public void remove(Menu menu) {
        Menu aux = em.merge(menu);
        em.remove(aux);
    }

    public Menu find(Object id) {
        return em.find(Menu.class, id);
    }

    public List<Menu> findAll() {
        return em.createQuery("select object(m) from Menu as m").getResultList();
    }

    public List<Menu> listarMenuActivos() {
        //return em.createQuery("select m from Menu m where m.menActivo = true and not m.fkMenCodigoPadre is null order by m.modCodigo.modCodigo, m.fkMenCodigoPadre.menCodigo, m.menOrden").getResultList();
        return em.createQuery("select m from Menu m where m.menActivo = true order by m.modCodigo.modCodigo,  m.menOrden").getResultList();
    }

    public List<Menu> menuTodosHijo() {
        try {
            Query q = em.createQuery("select m from Menu m where m.fkMenCodigoPadre is not null order by m.menOrden");
            return q.getResultList();
        } catch (Exception e) {
            System.out.println("ERRORRRR todos hijos"+e.toString());
            return null;
        }
    }

    public List<Menu> menuPadre(Integer modulo) {
        try {
            return em.createQuery("select m from Menu m where m.fkMenCodigoPadre is null and m.modCodigo.modCodigo = ?1 and m.menActivo = true order by m.menOrden").setParameter(1, modulo).getResultList();
        } catch (Exception e) {
            System.out.println("ERRORRRR menu padre "+e.toString());
            return null;
        }
    }

    public List<Menu> menuPadreA(Integer modulo, String uweCuenta) {
        try {
            return em.createQuery("select m from Acceso a join a.fkMenCodigo m where a.fkUweCuenta.uweCuenta = ?2 and a.accActivo = true and m.menActivo = true and m.fkMenCodigoPadre is null and m.modCodigo.modCodigo = ?1 order by m.menOrden")
                    .setParameter(1, modulo)
                    .setParameter(2, uweCuenta)
                    .getResultList();
        } catch (Exception e) {
            System.out.println("ERRORRRR menu padre "+e.toString());
            return null;
        }
    }

    public List<Menu> menuHijo(Menu menu) {
        try {
            return em.createQuery("select m from Menu m where m.fkMenCodigoPadre = ?1 and m.menActivo = true order by m.menOrden").setParameter(1, menu).getResultList();
        } catch (Exception e) {
            System.out.println("ERRORRRR menu hijo "+e.toString());
            return null;
        }
    }

    public List<Menu> menuHijoA(Menu menu, String uweCuenta) {
        try {
            return em.createQuery("select m from Acceso a join a.fkMenCodigo m where a.fkUweCuenta.uweCuenta = ?2 and a.accActivo = true and m.menActivo = true and m.fkMenCodigoPadre = ?1 order by m.menOrden")
                    .setParameter(1, menu)
                    .setParameter(2, uweCuenta)
                    .getResultList();
        } catch (Exception e) {
            System.out.println("ERRORRRR menu hijo "+e.toString());
            return null;
        }
    }

    public List<Menu> listarMenus(String uweCuenta) {
        return em.createQuery("select m from Acceso a join a.fkMenCodigo m where a.fkUweCuenta.uweCuenta = ?1 and a.accActivo = true and m.menActivo = true")
            .setParameter(1,uweCuenta)
            .getResultList();
    }

}
